package com.hzit.seckill.controller;

import com.hzit.common.utils.R;
import org.redisson.api.RSemaphore;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@RestController
public class RedissonSimpController {
	@Autowired
	private RedissonClient redissonClient;

	//1. 向redis放一个信号量对象
	@GetMapping("/put")
	public R put(){
		RSemaphore park = redissonClient.getSemaphore("park");
		park.trySetPermits(10);
		return R.ok();
	}
	//2. 抢占车位,每次减1
	@GetMapping("/park")
	public R park() throws InterruptedException {
		RSemaphore park = redissonClient.getSemaphore("park");
		//park.acquire();  // 阻塞式方法
		boolean b = park.tryAcquire(); // 非阻塞式方法
		if(b){
			// 可以购买了
			return R.ok();
		}
		return  R.error();
	}
	//3. 释放车位，加1
	@GetMapping("/release")
	public R release(){
		RSemaphore park = redissonClient.getSemaphore("park");
		park.release();
		return R.ok();
	}
}
